//
//  main.m
//  04-集合2Dictionary
//
//  Created by 李昊林 on 16/7/7.
//  Copyright © 2016年 李昊林. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Contact.h"
#import "ContactManager.h"
int main(int argc, const char * argv[]) {
    // 1，字典
    // 字典就是存储键值对(key-value)的集合类型
    // 字典中存储的数据是没有顺序的
    // 通过key值 存储，查找，value
    // 1>初始化
    // initwithobjectsAndkeys:Value,key,value,key.....
    // 字典中只能存放对象类型 （NSObject的子类）
    // 如果出现汉字 代码提示 一定会失效
    NSDictionary * dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"李四",@"name",[NSNumber numberWithInt:18],@"age", nil];
    // 2，构造器
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"李四",@"name",[NSNumber numberWithInt:18],@"age", nil];
    // 3>推荐使用 字面量 字符串 @"" 数值对象类型NSNumber @() 数组@[] 字典@{key:value,key:value}
    NSDictionary *diction = @{@"name":@"韩旭",
                               @"age":@18};
    //
    NSDictionary *diction1 = @{@"name":@"韩旭",@"age":@-18};
    //4>取值
    //<1>通过key值取Value
    NSString * name = [diction objectForKey:@"name"];
    // <2>获取所有key值
    NSArray * allkey = diction.allKeys;
    // <3>获取所有的Value；
    NSArray * allvalue = diction.allValues;
    // <4>count
    NSUInteger count = diction.count;
    // <5>
    NSArray *allValueArray = [diction objectsForKeys:diction.allKeys notFoundMarker:[NSString class]];
    NSLog(@"%@",allValueArray);
    // <6>通过一个对象 查找所有value是这个对象的所有的key；
    NSArray *array =[diction allKeysForObject:@"韩旭"];
    NSLog(@"%@", array);
    // <7>语法糖取值 arr[下标] diction[key]
    NSLog(@"%@",diction[@"name"]);
    
    
    
    
    // 可变字典 NSMutableDictionary
    // 1.初始化 与不可变字典基本相同
    NSMutableDictionary *mutableDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"韩旭",@"name", nil];
    // （不推荐使用自变量）
    NSMutableDictionary *mutableDiction = [@{}mutableCopy];

    // 2.取值 与不可变字典相同
    // 3.增 删 改
    // 添加 setObject:value forkey:key
    // 如果key已经存在，会将之前的value覆盖
    // 如果key不存在，会直接添加
    
    // 注意：字典中的key不要重复，如果重复会以最后的value进行赋值
    [mutableDic setObject:@"起名好难" forKey:@"name"];
    NSLog(@"%@",mutableDic);

    //删除
    [mutableDic removeObjectForKey:@"name"];
    [mutableDic removeAllObjects];
    [mutableDic removeObjectForKey:@"name"];
    NSLog(@"%@",mutableDic);
    
    // 3>语法糖 setObject:forkey:相同
    mutableDic[@"name"] = @"鹏飞";
    
//    完成以下需求
//    需求：1、定义联系人类Contact。实例变量：姓名(拼音，首字母大写)、性别、电话号码、住址、分组名称、年龄。方法：自定义初始化方法(姓名、电话号码)、显示联系人信息。
//    2、在main.m中定义字典，分组管理所有联系人。分组名为26个大写的英文字母。
//    3、可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
//    4、删除某个分组的全部联系人。
    Contact *contact = [[Contact alloc] initWithName:@"雨涵" phoneNumber:@"120"];
    contact.groupName = @"Y";
    Contact *contact1 = [[Contact alloc] initWithName:@"雨涵" phoneNumber:@"130"];
    contact1.groupName = @"Y";
    Contact *contact2 = [[Contact alloc] initWithName:@"雨涵" phoneNumber:@"140"];
    contact2.groupName = @"Y";
    Contact *contact3 = [[Contact alloc] initWithName:@"雨涵" phoneNumber:@"110"];
    contact3.groupName = @"Y";
    [contact showContact];
    
    NSMutableDictionary *contactDictionary = [NSMutableDictionary dictionary];
//    // key : A~Z value:NSMutableArray
//    //判断名字和手机号啊是不是空值
//    if (contact.name.length > 0 && contact.phoneNumber.length > 0) {
//        //都不是空值，可以添加
//        //通过联系人的分组名，取到对应的分组数组
//        NSMutableArray *contactArr = [contactDictionary objectForKey:contact.groupName];
//        //判断数组是否存在
//        if (contactArr == nil) {
//            //数组不存在，创建数组
//            contactArr = [NSMutableArray array];
//            [contactArr addObject:contact];
//            [contactDictionary setObject:contactArr forKey:contact.groupName];
//        } else {
//            //数组存在，直接添加
//            [contactArr addObject:contact];
//            [contactDictionary setObject:contactArr forKey:contact.groupName];
//            
//        }
//        NSLog(@"添加%@联系人成功", contact.name);
//    } else {
//        //否则 添加失败
//        NSLog(@"添加失败 !");
//    }
    ContactManager *contactManager = [[ContactManager alloc] initWithDictionary:contactDictionary];
    [contactManager addContact:contact];
    [contactManager addContact:contact1];
    [contactManager addContact:contact2];
    [contactManager addContact:contact3];
    
    NSLog(@"%@",contactManager.contactDictionary);
 
    //2.集合
    // 不可变 NSSet    可变NSMutableSet
    // 1>初始化
    // 集合会删掉重复的内容（互异性）
    // 要删除数组或者字典中重复的内容，放入集合中
    NSSet * set = [[NSSet alloc]initWithObjects:@"韩旭",@"韩旭", nil];
    NSLog(@"%@",set);
    //2>构造器
    NSSet *setObject = [NSSet setWithObjects:@"雨涵",@"雨涵",nil];
    //3> 没有提供集合的字面量
    // 取值
    // 从集合中取出任意元素
    [set anyObject];
    // count
    NSUInteger setCount = set.count;
    //集合去重
    NSArray * repeatArray = @[@10,@20,@30,@100,@10];
    NSLog(@"%@",repeatArray);
    NSSet * repeatSet = [NSSet setWithObject:repeatArray];
    repeatArray = repeatSet.allObjects;
    NSLog(@"%@",repeatArray);
    
    // 可变集合 NSMutableSet
    // 1>初始化与不可变集合一样
    // 2>取值 anObject
    // 3>可变集合 可变性
    NSMutableSet *mutableSet = [NSMutableSet set];
    // 添加
    [mutableSet addObject:@"123"];
    //  删除
    [mutableSet removeObject:@"123"];
    [mutableSet removeAllObjects];
    
    
    
    
    

    
    
    
    
    
    
    
    
    
    
    return 0;
}
